package lecode;

import java.util.*;

public class 找单独的数 {
    public static void main(String[] args) {
        // Add your test cases here

        System.out.println(4^5^5);
        /**
         *    0100 4
         *    0101 5
         *    0001 1(不同为1，相同为0)
         *    0101 5
         *    0100 4
         */

//        System.out.println(solution(new int[]{1, 1, 2, 2, 3, 3, 4, 5, 5}) == 4);
//
//        System.out.println(solution(new int[]{0, 1, 0, 1, 2}) == 2);

        System.out.println(solution3(new int[]{1, 1, 2, 2, 3, 3, 4, 5, 5}) == 4);

        System.out.println(solution3(new int[]{0, 1, 0, 1, 2}) == 2);
    }



    public static int solution(int[] cards) {
        int result = 0;
        for (int card : cards) {
            result ^= card;
        }
        return result;
    }


    public static int solution2(int[] cards) {
        HashSet<Integer> set = new HashSet<>();
        for (int card : cards) {
            if (set.contains(card)) {
                set.remove(card);
            } else {
                set.add(card);
            }
        }
        // 由于题目保证只有一个数字出现一次，所以 set 中剩下的唯一元素就是答案
        return set.iterator().next();
    }

    public static int solution3(int[] cards) {

        HashMap<Integer, Integer> map = new HashMap<>();
        // 由于题目保证只有一个数字出现一次，所以 set 中剩下的唯一元素就是答案
        for (int card : cards) {
            if (map.containsKey(card)) {
                map.remove(card);
            }else {
                map.put(card, card);
            }
        }
        // 获取第一个键
        Set<Integer> keys = map.keySet();
        return keys.iterator().next();
    }

}
